import proxy.Handler;
import proxy.ITarget;
import proxy.Target;

import java.lang.reflect.Proxy;

/**
 * 代理模式（Proxy Pattern）是一种结构型设计模式，
 * 它为其他对象提供一种代理以控制对这个对象的访问。在代理模式中，
 * 代理对象充当原始对象的代理，它负责处理客户端的请求，可能在调用实际对象之前或之后添加额外的行为，
 * 或者在某些情况下完全替代实际对象。
 * 相对装饰器模式来说，代理对象是用来完全替代目标对象的。代理模式下的原始对象对使用者透明。
 * 代理对象可能和原始对象类型不一致
 */
public class Main {
    /**
     * 算了我直接用JDK的proxy给你演示
     */
    public static void main(String[] args) {
        // 一般来说创建代理对象的步骤会被隐藏，为了不暴露原始对象引用
        ITarget target = new Target();
        Handler handler = new Handler(target);
        ITarget t = (ITarget) Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), handler);
        t.execute();

    }
}